/****TABLAS HASH POR EL METODO DE ENCADENAMIENTO SEPARADO o ABIERTO*****/

///LIBRERIAS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <signal.h>
#include "LAHAROT02ef.h"

int _d_large_file=64;

int main (int argc, char *argv[]){
      
      printf("<--------LADA HASH ------->");
      nombreArchEntrada[0]='\0' ;
      camposLlaveCatalogo[0]='\0';
      camposCalifCatalogo[0]='\0';
      camposLlaveEntrada[0]='\0';
      camposCalifCatalogo[0]='\0';
     
      /****
      signal( SIGTSTP, cleanupHash );
      signal( SIGSTOP, cleanupHash );
      signal( SIGINT,  cleanupHash );
      ***/ 
      
      //if(argc != 7)
      if(argc < 6)
      {
           printf("\n Uso: %s <arch_configuracion> <arch_entrada> <archivo_catalogo> <archivo_salida> <fecha_proceso>  opcional<numero_llamadas>\n\n",argv[0]);
	      cleanupHash(); 
		 exit(1);
      }

      if(abreArchivoConfiguracion(argv[1]) == FALSE)
      {
	   printf("\n No se pudo Abrir el Archivo de configuracion");
		cleanupHash(); 
		 exit(1);
      }

      cargaPropiedades();

      if(abreArchivos(argv[2],argv[3],argv[4]) == FALSE)
      {
           printf("\n No se pudieron Abrir los Archivos de Entrada Catalogo y Salida");
	        cleanupHash();	 
		 exit(1);
      }

      if(valida_fecha(argv[5]) == 1)
          strcpy(fecha_proceso, argv[5]);
      else
      {
           printf("\n\nError, la fecha de proceso es incorrecta\n");
              cleanupHash();  
		exit(1);
      }

      if(argc == 7)
    	  no_llamadas = atol(argv[6]);


      if(camposLlaveCatalogo[0] == '\0' || camposCalifCatalogo[0] == '\0')
      {
	  printf("\n Los campos de los Registros de Llave o Calificador o ambos del Archivo de Catalogo no estan definidos");
	      cleanupHash();	
		exit(1);
      }


      if(camposLlaveEntrada[0] == '\0' || camposCalifEntrada[0] == '\0')
      {
	  printf("\n Los campos de los Registros de Llave o Calificador o ambos del Archivo de Entrada no estan definidos");
	      cleanupHash();	
		exit(1);
      }


      TABLAHASH = (TablaHS **)malloc(sizeof(TablaHS)*HASH_SIZE);

      if(TABLAHASH == NULL)
      {
	  printf("\n No hay memoria para el hash");
	      cleanupHash();	
		exit(1);
      }

      clearHash();
      cargaCatalogo();
      imprimeIntentos();
      cleanupHash(); 
      return TRUE;
}
